home *** CD-ROM | disk | FTP | other *** search
/ IRIX 6.2 Development Libraries / SGI IRIX 6.2 Development Libraries.iso / dist / complib.idb / usr / share / catman / p_man / cat3 / complib / csfft1du.z / csfft1du
Text File  |  1996-03-14  |  8KB  |  133 lines

  1.  
  2.  
  3.  
  4. ccccssssfffffffftttt1111dddduuuu,,,,zzzzddddfffffffftttt1111dddduuuu((((3333FFFF))))                                    ccccssssfffffffftttt1111dddduuuu,,,,zzzzddddfffffffftttt1111dddduuuu((((3333FFFF))))
  5.  
  6.  
  7.  
  8. NNNNAAAAMMMMEEEE
  9.      ccccssssfffffffftttt1111dddduuuu,,,, zzzzddddfffffffftttt1111dddduuuu ---- 1D, Complex to Real, Inverse Fast Fourier
  10.      Transforms.
  11.  
  12. SSSSYYYYNNNNOOOOPPPPSSSSYYYYSSSS
  13.      _F_o_r_t_r_a_n :
  14.      ssssuuuubbbbrrrroooouuuuttttiiiinnnneeee ccccssssfffffffftttt1111dddduuuu(((( ssssiiiiggggnnnn,,,, nnnn,,,, aaaarrrrrrrraaaayyyy,,,, iiiinnnncccc,,,, ccccooooeeeeffffffff ))))
  15.           iiiinnnntttteeeeggggeeeerrrr ssssiiiiggggnnnn,,,, nnnn,,,, iiiinnnncccc
  16.           rrrreeeeaaaallll aaaarrrrrrrraaaayyyy((((0000::::((((2222****((((((((NNNN++++2222))))////2222))))----1111))))****iiiinnnncccc)))),,,, ccccooooeeeeffffffff((((nnnn++++11115555))))
  17.  
  18.      ssssuuuubbbbrrrroooouuuuttttiiiinnnneeee zzzzddddfffffffftttt1111dddduuuu(((( ssssiiiiggggnnnn,,,, nnnn,,,, aaaarrrrrrrraaaayyyy,,,, iiiinnnncccc,,,, ccccooooeeeeffffffff ))))
  19.           iiiinnnntttteeeeggggeeeerrrr ssssiiiiggggnnnn,,,, nnnn,,,, iiiinnnncccc
  20.           rrrreeeeaaaallll****8888 aaaarrrrrrrraaaayyyy((((0000::::((((2222****((((((((NNNN++++2222))))////2222))))----1111))))****iiiinnnncccc)))),,,, ccccooooeeeeffffffff((((nnnn++++11115555))))
  21.  
  22.  
  23.      _C :
  24.      ####iiiinnnncccclllluuuuddddeeee <<<<fffffffftttt....hhhh>>>>
  25.      iiiinnnntttt ccccssssfffffffftttt1111dddduuuu (((( iiiinnnntttt ssssiiiiggggnnnn,,,, iiiinnnntttt nnnn,,,, ffffllllooooaaaatttt ****aaaarrrrrrrraaaayyyy,,,,
  26.                iiiinnnntttt iiiinnnncccc,,,, ffffllllooooaaaatttt ****ccccooooeeeeffffffff))));;;;
  27.      iiiinnnntttt zzzzddddfffffffftttt1111dddduuuu (((( iiiinnnntttt ssssiiiiggggnnnn,,,, iiiinnnntttt nnnn,,,, ddddoooouuuubbbblllleeee ****aaaarrrrrrrraaaayyyy,,,,
  28.                iiiinnnntttt iiiinnnncccc,,,, ddddoooouuuubbbblllleeee ****ccccooooeeeeffffffff))));;;;
  29.  
  30.  
  31. DDDDEEEESSSSCCCCRRRRIIIIPPPPTTTTIIIIOOOONNNN
  32.      ccccssssfffffffftttt1111dddduuuu and zzzzddddfffffffftttt1111dddduuuu compute the real sequence of N samples, from its
  33.      Fourier transform. The i-th index f(i) of a sequence with Fourier
  34.      transform F(k) is equal to:
  35.           f(i) = Sum ( W^(i*k) * F(k) ), for k =0, ..., (N-1)
  36.                W = exp( (Sign*2*sqrt(-1)*PI) / N )
  37.  
  38.  
  39.      The Inverse Fourier transform is performed in-place, so the input Fourier
  40.      transform is overwritten by the final sequence output. As the output
  41.      sequence has real values, only the first half of the transform is needed.
  42.      The (N-k)-th sample of the transform would be the conjugate of the k-th
  43.      sample.
  44.  
  45.      However, some extra space is necessary. For an N sample output sequence,
  46.      the input complex transform takes ((N+2)/2) complex values.  This
  47.      represents either N+1(odd case) or N+2(even case) real values, that's one
  48.      or two more real values than the output real sequence.
  49.  
  50.  
  51. PPPPAAAARRRRAAAAMMMMEEEETTTTEEEERRRRSSSS
  52.      SSSSIIIIGGGGNNNN Integer specifying which sign to be used for the expression of W
  53.      (see above) - must be either +1 or -1.
  54.      Unchanged on exit.
  55.  
  56.      NNNN Integer, the number of samples in each sequence.
  57.      Unchanged on exit.
  58.  
  59.  
  60.  
  61.  
  62.  
  63.                                                                         PPPPaaaaggggeeee 1111
  64.  
  65.  
  66.  
  67.  
  68.  
  69.  
  70. ccccssssfffffffftttt1111dddduuuu,,,,zzzzddddfffffffftttt1111dddduuuu((((3333FFFF))))                                    ccccssssfffffffftttt1111dddduuuu,,,,zzzzddddfffffffftttt1111dddduuuu((((3333FFFF))))
  71.  
  72.  
  73.  
  74.      AAAARRRRRRRRAAAAYYYY Array containing the Fourier Transform.
  75.      On output, the element "i" of the real sequence is stored as A(i*inc) in
  76.      _F_o_r_t_r_a_n , and A[i*inc] in _C.
  77.      On exit, the array is overwritten by its transform.
  78.  
  79.      IIIINNNNCCCC Integer, increment between two consecutive elements of a sequence.
  80.      Unchanged on exit.
  81.  
  82.      CCCCOOOOEEEEFFFFFFFF Array of at least ( N + 15 ) elements.  On entry it contains the
  83.      Sines/Cosines and factorization of N. COEFF needs to be initialized with
  84.      a call to scfft1dui or dzfft1dui.
  85.      Unchanged on exit.
  86.  
  87.  
  88. EEEExxxxaaaammmmpppplllleeee ooooffff CCCCaaaalllllllliiiinnnngggg SSSSeeeeqqqquuuueeeennnncccceeee
  89.      Working on a sequences of 1024 real values.  We successively apply a
  90.      Direct Fourier Transform, an Inverse Fourier Trasnform and finally scale
  91.      back the result by a factor 1/N (1/1024.)-
  92.      This sequence DirectFFT-InverseFFT-Scaling is equivalent to the identity
  93.      operator and the final sequence should be equal (with round-off
  94.      precision) to the initial sequence.
  95.      Elements of each sequence are stored with increment (stride) 1, and the
  96.      offset between the first element of two succesive sequence (leading
  97.      dimension) is 1026 (1026 >= 1024+2).
  98.      _F_o_r_t_r_a_n
  99.           real array(0:1026-1), coeff(1024+15)
  100.           call csfft1dui( 1024, coeff)
  101.           call csfft1du( -1, 1024, array, 1, coeff)
  102.           call scfft1du(  1, 1024, array, 1, coeff)
  103.           call sscal1d( 1024, (1./real(1024)), array, 1)
  104.  
  105.      _C
  106.           #include <fft.h>
  107.           float array[1026], *coeff;
  108.           coeff = csfft1dui( 1024, NULL);
  109.           csfft1du( -1, 1024, array, 1, coeff);
  110.           csfft1du(  1, 1024, array, 1, coeff);
  111.           sscal1d( 1024, 1./(float)1024, array, 1);
  112.  
  113.      NNNNOOOOTTTTEEEE____1111 :::: The Direct and Inverse transforms should use opposite signs -
  114.      Which one is used (+1 or -1) for Direct transform is just a matter of
  115.      convention-
  116.  
  117.      NNNNOOOOTTTTEEEE____2222 :::: The Fourier Transforms are not normalized so the succession
  118.      Direct-Inverse transform scales the input data by a factor equal to the
  119.      size of the transform.
  120.  
  121. SSSSEEEEEEEE AAAALLLLSSSSOOOO
  122.      fft, csfft1dui, zdfft1dui, scfft1du, dzfft1du, csfft1du, zdfft1du,
  123.      sscal1d, dscal1d
  124.  
  125.  
  126.  
  127.  
  128.  
  129.                                                                         PPPPaaaaggggeeee 2222
  130.  
  131.  
  132.  
  133.